package com.hly.tool.date;

import com.matrixone.apps.domain.util.eMatrixDateFormat;
import matrix.db.Context;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * @Auther: Jack.Hao
 * @Date: 2021/5/19 16:48
 * @Description:
 */
public class EnoviaDate
{
    /**
     * 把浏览器显示的时间格式字符串转换为matrix可存储的时间格式字符串
     *
     * @param context        上下文
     * @param displayDateStr 浏览器显示的时间字符串
     * @return 服务端数据库存储时间格式的字符串
     * @throws Exception
     */
    public static String getMatrixDateByDisplayDate(Context context, String displayDateStr) throws Exception
    {
        if (displayDateStr == null || displayDateStr.trim().equals("") || displayDateStr.trim().toLowerCase().equals("null"))
        {
            throw new NullPointerException("displayDateStr is null ");
        }
        int displayDateFormat = eMatrixDateFormat.getEMatrixDisplayDateFormat();
        SimpleDateFormat sdf = new SimpleDateFormat(eMatrixDateFormat.getEMatrixDateFormat(), Locale.US);
        TimeZone var14 = TimeZone.getTimeZone(context.getSession().getTimezone());
        double offset = -1.0D * (double) var14.getRawOffset();
        double double1 = new Double(offset / 3600000.0D);
        Locale local = context.getLocale();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(displayDateFormat, displayDateFormat, local);
        String formattedInputDate = eMatrixDateFormat.getFormattedInputDate(context, displayDateStr, double1, local);
        String formattedDisplayDateTime = eMatrixDateFormat.getFormattedDisplayDateTime(context, formattedInputDate, true, displayDateFormat, double1, local);
        Date date = dateFormat.parse(formattedDisplayDateTime);
        String dateStr = sdf.format(date);
        return dateStr;
    }


    /**
     * 把服务端数据库存储时间字符串 转换成浏览器显示的时间字符串
     *
     * @param context       上下文
     * @param mxtrixDateStr 服务端数据库存储的字符串
     * @return 浏览器显示的时间字符串
     * @throws Exception
     */
    public static String getDisplayDateByMatrixDate(Context context, String mxtrixDateStr) throws Exception
    {
        Locale locale = context.getLocale();
        int displayDateFormat = eMatrixDateFormat.getEMatrixDisplayDateFormat();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(displayDateFormat, displayDateFormat, locale);
        SimpleDateFormat matrixSdf = new SimpleDateFormat(eMatrixDateFormat.getEMatrixDateFormat());
        Date date = matrixSdf.parse(mxtrixDateStr);
        return dateFormat.format(date);
    }


    /**
     * 获取服务端数据库存储时间字符串
     *
     * @param context 上下文
     * @param date    date 对象
     * @return 服务端数据库存储时间字符串
     * @throws Exception
     */
    public static String getMatrixDate(Context context, Date date) throws Exception
    {
        SimpleDateFormat matrixSdf = new SimpleDateFormat(eMatrixDateFormat.getEMatrixDateFormat());
        return matrixSdf.format(date);
    }


    /**
     * 把 matrix 中的日期字符串 转换成 date 格式
     *
     * @param matrixDateStr
     * @return 返回时间格式数据
     * @throws Exception
     */
    public static Date getDateByMatrixDate(String matrixDateStr) throws Exception
    {
        SimpleDateFormat matrixSdf = new SimpleDateFormat(eMatrixDateFormat.getEMatrixDateFormat());
        return matrixSdf.parse(matrixDateStr);
    }


}
